package cn.trigram.json.annotation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * {@link java.math.BigDecimal}  的jackson反序列化
 * <br/>
 * 提供{@link Model} 预设格式处理，也可使用{@link #pattern()}自定义格式处理
 *
 * @version 1.0.0
 * @date 2022/08/22 14:00:27
 * @since 1.0.0
 */
@Documented
@Target({FIELD})
@Retention(RUNTIME)
public @interface BigNumberDeserializer {
    /**
     * 是否使用jackson 自带的。一旦使用自带的，其它配置全部忽视
     *
     * @return boolean
     */
    boolean useJackson() default false;

    /**
     * 预设模式
     *
     * @return {@link Model }
     */
    Model model() default Model.DEFAULT;

    /**
     * 自定义配置：格式参考 {@link java.text.DecimalFormat}；此配置优先其余自定义配置；
     *
     * @return {@link String }
     */
    String pattern() default "";

    /**
     * 忽视解析异常
     *
     * @return boolean
     */
    boolean ignoreException() default false;

    enum Model {
        /**
         * 默认的正常数学的数值反序列
         */
        DEFAULT,
        /**
         * 金额万元，自动乘一万
         */
        TEN_THOUSAND_YUAN,

        /**
         * 金额万元千分位，自动乘一万
         */
        TEN_THOUSAND_YUAN_THOUSANDS,

        /**
         * 百分比数值，自动乘一百
         */
        PERCENTAGE,

        /**
         * 百分比数值，带%符号，自动乘一百
         */
        PERCENTAGE_WITH_SYMBOL,

    }
}
